package com.zlc.workflow.flow;


import com.zlc.workflow.constant.NodeType;
import com.zlc.workflow.flow.node.Path;

import java.util.List;

/**
 * 工作流节点类型
 *
 * @author zhanglei
 */
public interface NodeModel extends Model{



    /**
     * 返回节点类型
     *
     * @return  节点类型
     */
    NodeType nodeType();


    /**
     * 返回节点父节点
     *
     * @return  父节点
     */
    NodeModel parentNode();


    /**
     * 路线
     *
     * @return  路线集合
     */
    List<Path>  path();


    /**
     * 返回节点直属后续节点
     *
     * @return   子节点集合
     */
    List<NodeModel>  next();


    /**
     * 返回节点前面节点
     *
     * @return  前面节点集合
     */
    List<NodeModel>  pre();


    /**
     * 返回节点直属任务节点
     *
     * @return  任务节点集合
     */
    List<NodeModel>   nextTask();


    /**
     * 返回节点前面任务节点
     *
     * @return  前面节点集合
     */
    List<NodeModel>   preTask();


    /**
     * 返回指定路线后的任务节点
     *
     * @param line   路线
     * @return       任务节点集合
     */
    List<NodeModel>   submitLineTask(String line);


    /**
     * 获取后续所有可以提交的任务
     *
     * @return  任务节点集合
     */
    List<NodeModel>   nextAllTask();


    /**
     * 坐标x
     */
    double  x();


    /**
     * 坐标y
     */
    double y();

}
